

public class Test {
    public static void main(String[] args) {
<<<<<<< HEAD
        LinkedLast linkedLast = new LinkedLast();
        LinkedLast linkedLast1 = new LinkedLast();
        linkedLast.addFirst(21);
        linkedLast.addFirst(23);
        linkedLast.addFirst(78);
        linkedLast.addFirst(96);
//        linkedLast.display();
        linkedLast1.addFirst(12);
        linkedLast1.addFirst(15);
        linkedLast1.addFirst(14);
        linkedLast1.addFirst(11);
        createCut(linkedLast.head,linkedLast1.head);
        LinkedLast.Node ret = getIntersectionNode(linkedLast.head,linkedLast1.head);
        System.out.println(ret.val);
    }
    public static void createCut(LinkedLast.Node headA,LinkedLast.Node headB){
        headB.next.next = headA.next.next;
    }
    public static void main1(String[] args) {
=======
>>>>>>> 3d4de45b752d380e1a8e388eedcda6c0e088661c
//        LinkedLast linkedLast1 = new LinkedLast();
//        linkedLast1.addFirst(12);
//        linkedLast1.addFirst(11);
//        linkedLast1.addFirst(14);
//        linkedLast1.addFirst(11);
//        linkedLast1.remove(12);
//        boolean str1 = linkedLast1.chkPalindrome();
//        System.out.println(str1);
//        System.out.println("========");

        LinkedLast linkedLast2 = new LinkedLast();
        linkedLast2.addFirst(12);
        linkedLast2.addFirst(14);
        linkedLast2.addFirst(14);
        linkedLast2.addFirst(12);
        boolean str = linkedLast2.chkPalindrome();
        System.out.println(str);
<<<<<<< HEAD
    }
    public static LinkedLast.Node  getIntersectionNode(LinkedLast.Node headA, LinkedLast.Node headB) {
        //1、分别求两个链表的长度
        int lenA = 0;
        int lenB = 0;
        LinkedLast.Node pl = headA;//pl指向的链表是长链表
        LinkedLast.Node ps = headB;//ps指向的链表是短链表
        while(pl != null){
            lenA++;//遍历从第一个节点开始，所以要先++，再向后移动。
            pl =pl.next;
        }
        while(ps != null){
            lenB++;
            ps = ps.next;
        }
        //2、通过上述计算链表的长度，pl和ps都指向了链表的结尾，通过下面的操作让他们再指向链表的开头。
        pl = headA;
        ps = headB;
        int len = lenA - lenB;//大小
        //3、根据len的值，修改指向
        //下面这个if判断可以保证：1、len一定是一个正数  2、pl指向的链表一定是最长的，ps指向的链表一定是最短的
        if(len < 0){//表示lenA的长度小于lenB的长度
            pl = headB;//交换指向，headB长，pl指向headB
            ps = headA;//headA较短，ps指向headA
            len = lenB-lenA;
        }
        //pl走差值部分
        while(len != 0){//当两个链表长度存在差值时，较长链表先走
            pl = pl.next;
            len--;
        }
        while(pl != ps){//pl和ps没有指向同一个节点，那么继续向后遍历，直到相交
            pl = pl.next;
            ps = ps.next;
        }
        //当上面的程序运行完pl一定等于ps，即使两个链表当中有一个链表为空，当较长的链表遍历完之后，pl==null,所以pl==ps
        if(pl == ps && pl == null){//当两个链表当中有一个为空，那么输出null
            return null;
        }
        return pl;//否则返回pl
=======
>>>>>>> 3d4de45b752d380e1a8e388eedcda6c0e088661c
    }
}
